/**
 * 截屏插件，为UEditor提供插入支持
 * @file
 * @since 1.4.2
 */
UE.plugin.register("snapscreen", function () {
    var me = this;
    var snapplugin;

    function getLocation(url) {
        var search,
            a = document.createElement("a"),
            params =
                utils.serializeParam(me.queryCommandValue("serverparam")) || "";

        a.href = url;
        if (browser.ie) {
            a.href = a.href;
        }

        search = a.search;
        if (params) {
            search = search + (search.indexOf("?") == -1 ? "?" : "&") + params;
            search = search.replace(/[&]+/gi, "&");
        }
        return {
            port: a.port,
            hostname: a.hostname,
            path: a.pathname + search || +a.hash,
        };
    }

    return {
        commands: {
            /**
             * 字体背景颜色
             * @command snapscreen
             * @method execCommand
             * @param { String } cmd 命令字符串
             * @example
             * ```javascript
             * editor.execCommand('snapscreen');
             * ```
             */
            snapscreen: {
                execCommand: function (cmd) {
                    var url, local, res;
                    var lang = me.getLang("snapScreen_plugin");

                    if (!snapplugin) {
                        var container = me.container;
                        var doc =
                            me.container.ownerDocument || me.container.document;
                        snapplugin = doc.createElement("object");
                        try {
                            snapplugin.type = "application/x-pluginbaidusnap";
                        } catch (e) {
                            return;
                        }
                        snapplugin.style.cssText =
                            "position:absolute;left:-9999px;width:0;height:0;";
                        snapplugin.setAttribute("width", "0");
                        snapplugin.setAttribute("height", "0");
                        container.appendChild(snapplugin);
                    }

                    function onSuccess(rs) {
                        try {
                            rs = eval("(" + rs + ")");
                            if (rs.state == "SUCCESS") {
                                var opt = me.options;
                                me.execCommand("insertimage", {
                                    src: opt.snapscreenUrlPrefix + rs.url,
                                    _src: opt.snapscreenUrlPrefix + rs.url,
                                    alt: rs.title || "",
                                    floatStyle: opt.snapscreenImgAlign,
                                });
                            } else {
                                alert(rs.state);
                            }
                        } catch (e) {
                            alert(lang.callBackErrorMsg);
                        }
                    }
                    url = me.getActionUrl(me.getOpt("snapscreenActionName"));
                    local = getLocation(url);
                    setTimeout(function () {
                        try {
                            res = snapplugin.saveSnapshot(
                                local.hostname,
                                local.path,
                                local.port
                            );
                        } catch (e) {
                            me.ui._dialogs["snapscreenDialog"].open();
                            return;
                        }

                        onSuccess(res);
                    }, 50);
                },
                queryCommandState: function () {
                    return navigator.userAgent.indexOf("Windows", 0) != -1
                        ? 0
                        : -1;
                },
            },
        },
    };
});
